package com.amumu.drama.common.modules.alipay.dto.req;

import lombok.Data;

import java.io.Serializable;
import java.math.BigDecimal;
import java.util.Date;
import java.util.List;

/**
 * @author sunzhuang
 * @date 2024/7/4 14:39
 * @slogan 天下风云出我辈, 一入代码岁月催
 * @desc 阿里支付异步回调支付
 */
@Data
public class AliNotifyReq  implements Serializable {
    /**
     * 通知的发送时间。格式为 yyyy-MM-dd HH:mm:ss。
     */
    private Date notifyTime;

    /**
     * 通知的类型。
     */
    private String notifyType;

    /**
     * 通知校验ID。
     */
    private String notifyId;

    /**
     * 支付宝分配给开发者的应用ID。
     */
    private String appId;

    /**
     * 编码格式，如 utf-8、gbk、gb2312 等。
     */
    private String charset;

    /**
     * 调用的接口版本，固定为：1.0。
     */
    private String version;

    /**
     * 商家生成签名字符串所使用的签名算法类型，目前支持 RSA2 和 RSA，推荐使用 RSA2。
     */
    private String signType;

    /**
     * 签名。
     */
    private String sign;

    /**
     * 支付宝交易凭证号。
     */
    private String tradeNo;

    /**
     * 原支付请求的商户订单号。
     */
    private String outTradeNo;

    /**
     * 商户业务ID，主要是退款通知中返回退款申请的流水号。
     */
    private String outBizNo;

    /**
     * 买家支付宝用户号。
     */
    private String buyerId;

    /**
     * 买家支付宝账号。
     */
    private String buyerLogonId;

    /**
     * 卖家支付宝用户号。
     */
    private String sellerId;

    /**
     * 卖家支付宝账号。
     */
    private String sellerEmail;

    /**
     * 交易目前所处的状态。
     */
    private String tradeStatus;

    /**
     * 本次交易支付的订单金额，单位为人民币（元）。
     */
    private BigDecimal totalAmount;

    /**
     * 商家在收益中实际收到的款项，单位人民币（元）。
     */
    private BigDecimal receiptAmount;

    /**
     * 用户在交易中支付的可开发票的金额。
     */
    private BigDecimal invoiceAmount;

    /**
     * 用户在交易中支付的金额。
     */
    private BigDecimal buyerPayAmount;

    /**
     * 使用集分宝支付的金额。
     */
    private BigDecimal pointAmount;

    /**
     * 退款通知中，返回总退款金额，单位为人民币（元），支持两位小数。
     */
    private BigDecimal refundFee;

    /**
     * 商品的标题/交易标题/订单标题/订单关键字等。
     */
    private String subject;

    /**
     * 订单的备注、描述、明细等。
     */
    private String body;

    /**
     * 该笔交易创建的时间。格式为 yyyy-MM-dd HH:mm:ss。
     */
    private Date gmtCreate;

    /**
     * 该笔交易的买家付款时间。格式为 yyyy-MM-dd HH:mm:ss。
     */
    private Date gmtPayment;

    /**
     * 该笔交易的退款时间。格式为 yyyy-MM-dd HH:mm:ss.S。
     */
    private Date gmtRefund;

    /**
     * 该笔交易结束时间。格式为 yyyy-MM-dd HH:mm:ss。
     */
    private Date gmtClose;

    /**
     * 支付成功的各个渠道金额信息。
     */
    private List<FundBill> fundBillList;

    /**
     * 公共回传参数，如果请求时传递了该参数，则返回给商家时会在异步通知时将该参数原样返回。
     */
    private String passbackParams;

    /**
     * 本交易支付时所有优惠券信息。
     */
    private List<VoucherDetail> voucherDetailList;

    // 内嵌类 FundBill
    @Data
    public static class FundBill {
        private BigDecimal amount;
        private String fundChannel;
    }

    // 内嵌类 VoucherDetail
    @Data
    public static class VoucherDetail {
        private BigDecimal amount;
        private BigDecimal merchantContribute;
        private BigDecimal otherContribute;
        private String type;
        private String memo;
    }
}
